'use strict';

const Controller = require('egg').Controller;

/**
 * 创建者: rliang
 * 创建时间: 2019年08月18日 20:14:02
 * 功能描述: 菜单管理控制器
 */
class SysMenuController extends Controller {

  /**
   * 查询菜单树
   */
  async querySysMenusTree() {
    const { ctx, service } = this;
    const sysMenusTree = await service.admin.sysMenus.querySysMenusTree();
    if (sysMenusTree) {
      ctx.response.success(sysMenusTree);
      return;
    }
    ctx.response.failByCode('0004');
    // 添加操作日志
    const des = `【${ctx.curAdminUser.realName}】在【${ctx.getDate_YYYY_MM_DD_HH_mm_ss()}】查询了菜单列表`;
    ctx.writeSysOperationLogs('查询所有菜单', ctx.getSystemLogType('QUERY'), { curAdminUser: ctx.curAdminUser, des });
  }
  /**
  * 查询菜单详细信息
  */
  async findMenuById() {
    const { ctx, service } = this;
    if (!(ctx.curAdminUser && ctx.curAdminUser.id)) {
      ctx.response.failByCode('0003');
      return;
    }
    const menuId = ctx.request.body.menuId;
    const menuInfo = await service.admin.sysMenus.findMenuById(menuId);
    ctx.response.success(menuInfo);
    // 添加操作日志
    const des = `【${ctx.curAdminUser.realName}】在【${ctx.getDate_YYYY_MM_DD_HH_mm_ss()}】查询的菜单信息为【${menuInfo}】`;
    ctx.writeSysOperationLogs('查询菜单详细信息', ctx.getSystemLogType('QUERY'), { curAdminUser: ctx.curAdminUser, des });
  }
  /**
  * 删除菜单
  */
  async deleteMenu() {
    const { ctx, service } = this;
    const menuIds = [];
    const menuId = ctx.request.body.menuId;
    menuIds.concat(menuId);
    await service.admin.sysMenus.deleteMenu(menuId);
    ctx.response.success();
    // 添加操作日志
    const des = `【${ctx.curAdminUser.realName}】在【${ctx.getDate_YYYY_MM_DD_HH_mm_ss()}】删除的菜单id为【${menuIds}】`;
    ctx.writeSysOperationLogs('删除菜单', ctx.getSystemLogType('DELETE'), { curAdminUser: ctx.curAdminUser, des });
  }
  /**
   * 添加菜单
   */
  async adminAddMenu() {
     const { ctx, service } = this;
     const menuParams = ctx.request.body;
     const userId = ctx.curAdminUser && ctx.curAdminUser.id;
     if (!userId) {
       ctx.response.failByCode('0003');
       return;
     }
     const menuDb = this.ctx.request.getAndValidate_addSysMenus();
     menuDb.sortIndex = parseInt(menuParams.sortIndex || 0);
     menuDb.creator = `${userId}`;
     menuDb.createTime = this.ctx.getDate_YYYYMMDDHHmmss();
     menuDb.updateTime = this.ctx.getDate_YYYYMMDDHHmmss();
     await service.admin.sysMenus.adminAddMenu(menuDb);
     ctx.response.success();
     // 添加操作日志
    const des = `【${ctx.curAdminUser.realName}】在【${ctx.getDate_YYYY_MM_DD_HH_mm_ss()}】添加了菜单【${menuDb}】`;
    ctx.writeSysOperationLogs('添加菜单', ctx.getSystemLogType('CREATE'), { curAdminUser: ctx.curAdminUser, des });
  }
  /**
   * 更新菜单
   */
  async updateMenu() {
    const { ctx, service } = this;
    const userId = ctx.curAdminUser && ctx.curAdminUser.id;
    if (!userId) {
      ctx.response.failByCode('0003');
      return;
    }

    const menuDb = this.ctx.request.getAndValidate_updateMenu();
    menuDb.sortIndex = parseInt(menuDb.sortIndex || 0);
    menuDb.updateTime = this.ctx.getDate_YYYYMMDDHHmmss();

    await service.admin.sysMenus.updateMenu(menuDb);
    ctx.response.success();
     // 添加操作日志
    const des = `【${ctx.curAdminUser.realName}】在【${ctx.getDate_YYYY_MM_DD_HH_mm_ss()}】更改的菜单为【${menuDb}】`;
    ctx.writeSysOperationLogs('更新菜单', ctx.getSystemLogType('UPDATE'), { curAdminUser: ctx.curAdminUser, des });
  }

}

module.exports = SysMenuController;
